#!/usr/bin/env python
"""
社区管理系统启动脚本
Community Management System Startup Script
"""
import os
import sys
import subprocess
import django
from django.core.management import execute_from_command_line


def print_banner():
    """打印启动横幅"""
    banner = """
╭─────────────────────────────────────────╮
│        🏢 社区管理系统 🏢               │
│      Community Management System       │
│                                         │
│         正在启动服务...                 │
╰─────────────────────────────────────────╯
    """
    print(banner)


def check_requirements():
    """检查项目依赖"""
    print("📋 检查项目依赖...")
    
    try:
        import django
        print(f"✅ Django {django.get_version()} 已安装")
    except ImportError:
        print("❌ Django 未安装，请运行: pip install -r requirements.txt")
        return False
    
    try:
        import MySQLdb
        print("✅ MySQL客户端已安装")
    except ImportError:
        try:
            import pymysql
            print("✅ PyMySQL已安装")
        except ImportError:
            print("❌ MySQL客户端未安装，请运行: pip install mysqlclient")
            return False
    
    return True


def setup_database():
    """设置数据库"""
    print("\n🗄️  设置数据库...")
    
    # 设置Django环境
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'community_project.settings')
    django.setup()
    
    try:
        # 生成迁移文件
        print("生成数据库迁移文件...")
        execute_from_command_line(['manage.py', 'makemigrations'])
        
        # 应用迁移
        print("应用数据库迁移...")
        execute_from_command_line(['manage.py', 'migrate'])
        
        print("✅ 数据库设置完成")
        return True
        
    except Exception as e:
        print(f"❌ 数据库设置失败: {e}")
        print("请确保:")
        print("1. MySQL服务已启动")
        print("2. 已创建数据库 'project_db1'")
        print("3. 数据库连接配置正确")
        return False


def collect_static():
    """收集静态文件"""
    print("\n📦 收集静态文件...")
    
    try:
        execute_from_command_line(['manage.py', 'collectstatic', '--noinput'])
        print("✅ 静态文件收集完成")
        return True
    except Exception as e:
        print(f"❌ 静态文件收集失败: {e}")
        return False


def create_superuser():
    """创建超级用户（可选）"""
    print("\n👤 创建管理员账号（可选）")
    
    choice = input("是否创建超级用户账号？(y/N): ").lower()
    
    if choice in ['y', 'yes']:
        try:
            execute_from_command_line(['manage.py', 'createsuperuser'])
            print("✅ 超级用户创建完成")
        except Exception as e:
            print(f"❌ 超级用户创建失败: {e}")
    else:
        print("跳过超级用户创建")


def show_test_accounts():
    """显示测试账号信息"""
    print("\n🔑 测试账号信息:")
    print("┌─────────────┬─────────────┬─────────┬─────────┬─────────┐")
    print("│    账号     │    密码     │  角色   │  姓名   │  积分   │")
    print("├─────────────┼─────────────┼─────────┼─────────┼─────────┤")
    print("│ zhangsan    │ 123456      │ 居民    │ 张三    │ 100     │")
    print("│ lisi666     │ 654321      │ 居民    │ 李四    │ 250     │")
    print("│ wangwu88    │ wangwu88    │ 管理员  │ 王五    │ 500     │")
    print("│ zhaoliu     │ zl123456    │ 工作员  │ 赵六    │ 75      │")
    print("└─────────────┴─────────────┴─────────┴─────────┴─────────┘")


def start_server():
    """启动开发服务器"""
    print("\n🚀 启动开发服务器...")
    print("访问地址: http://127.0.0.1:8000")
    print("管理后台: http://127.0.0.1:8000/admin")
    print("\n按 Ctrl+C 停止服务器")
    print("─" * 50)
    
    try:
        execute_from_command_line(['manage.py', 'runserver'])
    except KeyboardInterrupt:
        print("\n\n👋 服务器已停止")
        sys.exit(0)
    except Exception as e:
        print(f"\n❌ 服务器启动失败: {e}")
        sys.exit(1)


def main():
    """主函数"""
    print_banner()
    
    # 检查依赖
    if not check_requirements():
        print("\n请先安装项目依赖:")
        print("pip install -r requirements.txt")
        sys.exit(1)
    
    # 设置数据库
    if not setup_database():
        print("\n请检查数据库配置并重试")
        sys.exit(1)
    
    # 收集静态文件
    collect_static()
    
    # 创建超级用户
    create_superuser()
    
    # 显示测试账号
    show_test_accounts()
    
    # 启动服务器
    start_server()


if __name__ == '__main__':
    main()
